Activity: Spatially Continuous Data I

Practice questions

Answer the following questions:

  1. What is the difference between spatially continuous data and a spatial point pattern?
  2. What is the purpose of spatial interpolation?
  3. In your own words describe the method of Inverse Distance Weighting.
  4. Consider the following spatial interpolation algorithms: Voronoi polygons and k-point means. How do they differ when the number of points used to calculate means is 1?

Learning objectives

In this activity, you will:

  1. Explore a dataset with area data using visualization as appropriate.
  2. Discuss a process that might explain any pattern observed from the data.
  3. Conduct a modeling exercise using appropriate techniques. Justify your modeling decisions.

Suggested reading

  • Bailey TC and Gatrell AC [-@Bailey1995] Interactive Spatial Data Analysis, Chapters 5 and 6. Longman: Essex.
  • Bivand RS, Pebesma E, and Gomez-Rubio V [-@Bivand2008] Applied Spatial Data Analysis with R, Chapter 8. Springer: New York.
  • Brunsdon C and Comber L [-@Brunsdon2015R] An Introduction to R for Spatial Analysis and Mapping, Chapter 6, Sections 6.7 and 6.8. Sage: Los Angeles.
  • Isaaks EH and Srivastava RM [-@Isaaks1989applied] An Introduction to Applied Geostatistics, CHAPTERS. Oxford University Press: Oxford.
  • O’Sullivan D and Unwin D [-@Osullivan2010] Geographic Information Analysis, 2nd Edition, Chapters 9 and 10. John Wiley & Sons: New Jersey.

Preliminaries

For this activity you will need the following:

  • An R markdown notebook version of this document (the source file).

  • A package called geog4ga3.

It is good practice to clear the working space to make sure that you do not have extraneous items there when you begin your work. The command in R to clear the workspace is rm (for “remove”), followed by a list of items to be removed. To clear the workspace from all objects, do the following:

rr rm(list = ls())

Note that ls() lists all objects currently on the worspace.

Load the libraries you will use in this activity (load other packages as appropriate).

library(tidyverse)
-- Attaching packages --------------------------------------- tidyverse 1.2.1 --
v ggplot2 3.1.0       v purrr   0.2.5  
v tibble  2.0.1       v dplyr   0.8.0.1
v tidyr   0.8.2       v stringr 1.3.1  
v readr   1.3.1       v forcats 0.3.0  
-- Conflicts ------------------------------------------ tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
library(spatstat)
Loading required package: spatstat.data
Loading required package: nlme

Attaching package: 㤼㸱nlme㤼㸲

The following object is masked from 㤼㸱package:dplyr㤼㸲:

    collapse

Loading required package: rpart

spatstat 1.58-2       (nickname: 㤼㸱Not Even Wrong㤼㸲) 
For an introduction to spatstat, type 㤼㸱beginner㤼㸲 


Note: spatstat version 1.58-2 is out of date by more than 3 months; we recommend upgrading to the latest version.
library(spdep)
Loading required package: sp
Loading required package: Matrix

Attaching package: 㤼㸱Matrix㤼㸲

The following object is masked from 㤼㸱package:tidyr㤼㸲:

    expand

Loading required package: spData
To access larger datasets in this package, install the spDataLarge package with: `install.packages('spDataLarge',
repos='https://nowosad.github.io/drat/', type='source')`
library(geog4ga3)

Load the data that you will use in this activity:

data("aquifer")

The data is a set of piezometric head (watertable pressure) observations of the Wolfcamp Aquifer in Texas (https://en.wikipedia.org/wiki/Hydraulic_head). Measures of pressure can be used to infer the flow of underground water, since water flows from high to low pressure areas.

These data were collected to evaluate potential flow of contamination related to a high level toxic waste repository in Texas. The Deaf Smith county site in Texas was one of three potential sites proposed for this repository. Beneath the site is a deep brine aquifer known as the Wolfcamp aquifer that may serve as a conduit of contamination leaking from the repository.

The data set consists of 85 georeferenced measurements of piezometric head. Possible applications of interpolation are to determine sites at risk and to quantify uncertainty of the interpolated surface, to evaluate the best locations for monitoring stations.

aquifer$ID <- factor(c(1:nrow(aquifer)))
aquiferID <- as.data.frame(aquifer$ID)

Activity

  1. Map the Wolfcamp Aquifer data.
plot_wolfpack <- ggplot(data = aquifer, aes (x = X, y = Y, color = H)) +
  geom_point(alpha = 0.5) + 
  scale_color_distiller(palette = "OrRd", trans = "reverse") +
  coord_equal()
plot_wolfpack

plot_ly(data = aquifer, x = ~X, y = ~Y, z = ~H,
         marker = list(color = ~H, colorscale = c("Orange", "Red"), 
                       showscale = TRUE)) %>% 
  add_markers()
  1. Create a surface using Voronoi polygons.
  1. Create a surface using IDW. What is the effect of changing the power of the inverse distance function?
W <- owin(xrange = c(0, 200), yrange = c(0, 200))
aquifer.ppp <- as.ppp(X = aquifer, W = W)
39 points were rejected as lying outside the specified window
z_p.idw10 <- idw(aquifer.ppp, power = 10)
z_p.idw2 <- idw(aquifer.ppp, power = 2)
z_p.idw5 <- idw(aquifer.ppp, power = 5)
plot(z_p.idw10)

plot(z_p.idw5)

plot(z_p.idw2)

  1. Create a surface using k-point means. What is the effect of changing the number of points used in this algorithm?
target_xy = expand.grid(x = seq(0.5, 100, 2.2), y = seq(0.5, 100, 2.2))
source_xy = cbind(x = aquifer$X, y = aquifer$Y)
kpoint.10 <- kpointmean(source_xy = source_xy, z = aquifer$H, target_xy = target_xy, k =10)
kpoint.1 <- kpointmean(source_xy = source_xy, z = aquifer$H, target_xy = target_xy, k =1)
kpoint.5 <- kpointmean(source_xy = source_xy, z = aquifer$H, target_xy = target_xy, k =5)
ggplot(data = kpoint.10, aes(x = x, y = y, fill = z)) +
  geom_tile() +
  scale_fill_distiller(palette = "OrRd", trans = "reverse") +
  coord_equal()

ggplot(data = kpoint.5, aes(x = x, y = y, fill = z)) +
  geom_tile() +
  scale_fill_distiller(palette = "OrRd", trans = "reverse") +
  coord_equal()

ggplot(data = kpoint.1, aes(x = x, y = y, fill = z)) +
  geom_tile() +
  scale_fill_distiller(palette = "OrRd", trans = "reverse") +
  coord_equal()

  1. Discuss the limitations of these approaches. How can you calculate the uncertainty in the predictions?
LS0tDQp0aXRsZTogIkFjdGl2aXR5OiBTcGF0aWFsbHkgQ29udGludW91cyBEYXRhIEkiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIEFjdGl2aXR5OiBTcGF0aWFsbHkgQ29udGludW91cyBEYXRhIEkNCg0KIyMgUHJhY3RpY2UgcXVlc3Rpb25zDQoNCkFuc3dlciB0aGUgZm9sbG93aW5nIHF1ZXN0aW9uczoNCg0KMS4gV2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNwYXRpYWxseSBjb250aW51b3VzIGRhdGEgYW5kIGEgc3BhdGlhbCBwb2ludCBwYXR0ZXJuPw0KMi4gV2hhdCBpcyB0aGUgcHVycG9zZSBvZiBzcGF0aWFsIGludGVycG9sYXRpb24/DQozLiBJbiB5b3VyIG93biB3b3JkcyBkZXNjcmliZSB0aGUgbWV0aG9kIG9mIEludmVyc2UgRGlzdGFuY2UgV2VpZ2h0aW5nLiANCjQuIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc3BhdGlhbCBpbnRlcnBvbGF0aW9uIGFsZ29yaXRobXM6IFZvcm9ub2kgcG9seWdvbnMgYW5kIGstcG9pbnQgbWVhbnMuIEhvdyBkbyB0aGV5IGRpZmZlciB3aGVuIHRoZSBudW1iZXIgb2YgcG9pbnRzIHVzZWQgdG8gY2FsY3VsYXRlIG1lYW5zIGlzIDE/DQoNCg0KIyMgTGVhcm5pbmcgb2JqZWN0aXZlcw0KDQpJbiB0aGlzIGFjdGl2aXR5LCB5b3Ugd2lsbDoNCg0KMS4gRXhwbG9yZSBhIGRhdGFzZXQgd2l0aCBhcmVhIGRhdGEgdXNpbmcgdmlzdWFsaXphdGlvbiBhcyBhcHByb3ByaWF0ZS4NCjIuIERpc2N1c3MgYSBwcm9jZXNzIHRoYXQgbWlnaHQgZXhwbGFpbiBhbnkgcGF0dGVybiBvYnNlcnZlZCBmcm9tIHRoZSBkYXRhLg0KMy4gQ29uZHVjdCBhIG1vZGVsaW5nIGV4ZXJjaXNlIHVzaW5nIGFwcHJvcHJpYXRlIHRlY2huaXF1ZXMuIEp1c3RpZnkgeW91ciBtb2RlbGluZyBkZWNpc2lvbnMuDQoNCiMjIFN1Z2dlc3RlZCByZWFkaW5nDQoNCi0gQmFpbGV5IFRDIGFuZCBHYXRyZWxsIEFDIFstQEJhaWxleTE5OTVdIEludGVyYWN0aXZlIFNwYXRpYWwgRGF0YSBBbmFseXNpcywgQ2hhcHRlcnMgNSBhbmQgNi4gTG9uZ21hbjogRXNzZXguDQotIEJpdmFuZCBSUywgUGViZXNtYSBFLCBhbmQgR29tZXotUnViaW8gViBbLUBCaXZhbmQyMDA4XSBBcHBsaWVkIFNwYXRpYWwgRGF0YSBBbmFseXNpcyB3aXRoIFIsIENoYXB0ZXIgOC4gU3ByaW5nZXI6IE5ldyBZb3JrLg0KLSBCcnVuc2RvbiBDIGFuZCBDb21iZXIgTCBbLUBCcnVuc2RvbjIwMTVSXSBBbiBJbnRyb2R1Y3Rpb24gdG8gUiBmb3IgU3BhdGlhbCBBbmFseXNpcyBhbmQgTWFwcGluZywgQ2hhcHRlciA2LCBTZWN0aW9ucyA2LjcgYW5kIDYuOC4gU2FnZTogTG9zIEFuZ2VsZXMuDQotIElzYWFrcyBFSCBhbmQgU3JpdmFzdGF2YSBSTSAgWy1ASXNhYWtzMTk4OWFwcGxpZWRdIEFuIEludHJvZHVjdGlvbiB0byBBcHBsaWVkIEdlb3N0YXRpc3RpY3MsICoqQ0hBUFRFUlMqKi4gT3hmb3JkIFVuaXZlcnNpdHkgUHJlc3M6IE94Zm9yZC4NCi0gTydTdWxsaXZhbiBEIGFuZCBVbndpbiBEIFstQE9zdWxsaXZhbjIwMTBdIEdlb2dyYXBoaWMgSW5mb3JtYXRpb24gQW5hbHlzaXMsIDJuZCBFZGl0aW9uLCBDaGFwdGVycyA5IGFuZCAxMC4gSm9obiBXaWxleSAmIFNvbnM6IE5ldyBKZXJzZXkuDQoNCiMjIFByZWxpbWluYXJpZXMNCg0KRm9yIHRoaXMgYWN0aXZpdHkgeW91IHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nOg0KDQoqIEFuIFIgbWFya2Rvd24gbm90ZWJvb2sgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50ICh0aGUgc291cmNlIGZpbGUpLg0KDQoqIEEgcGFja2FnZSBjYWxsZWQgYGdlb2c0Z2EzYC4NCg0KSXQgaXMgZ29vZCBwcmFjdGljZSB0byBjbGVhciB0aGUgd29ya2luZyBzcGFjZSB0byBtYWtlIHN1cmUgdGhhdCB5b3UgZG8gbm90IGhhdmUgZXh0cmFuZW91cyBpdGVtcyB0aGVyZSB3aGVuIHlvdSBiZWdpbiB5b3VyIHdvcmsuIFRoZSBjb21tYW5kIGluIFIgdG8gY2xlYXIgdGhlIHdvcmtzcGFjZSBpcyBgcm1gIChmb3IgInJlbW92ZSIpLCBmb2xsb3dlZCBieSBhIGxpc3Qgb2YgaXRlbXMgdG8gYmUgcmVtb3ZlZC4gVG8gY2xlYXIgdGhlIHdvcmtzcGFjZSBmcm9tIF9hbGxfIG9iamVjdHMsIGRvIHRoZSBmb2xsb3dpbmc6DQpgYGB7cn0NCnJtKGxpc3QgPSBscygpKQ0KYGBgDQoNCk5vdGUgdGhhdCBgbHMoKWAgbGlzdHMgYWxsIG9iamVjdHMgY3VycmVudGx5IG9uIHRoZSB3b3JzcGFjZS4NCg0KTG9hZCB0aGUgbGlicmFyaWVzIHlvdSB3aWxsIHVzZSBpbiB0aGlzIGFjdGl2aXR5IChsb2FkIG90aGVyIHBhY2thZ2VzIGFzIGFwcHJvcHJpYXRlKS4gDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShzcGF0c3RhdCkNCmxpYnJhcnkoc3BkZXApDQpsaWJyYXJ5KGdlb2c0Z2EzKQ0KYGBgDQoNCkxvYWQgdGhlIGRhdGEgdGhhdCB5b3Ugd2lsbCB1c2UgaW4gdGhpcyBhY3Rpdml0eToNCmBgYHtyfQ0KZGF0YSgiYXF1aWZlciIpDQpgYGANCg0KVGhlIGRhdGEgaXMgYSBzZXQgb2YgcGllem9tZXRyaWMgaGVhZCAod2F0ZXJ0YWJsZSBwcmVzc3VyZSkgb2JzZXJ2YXRpb25zIG9mIHRoZSBXb2xmY2FtcCBBcXVpZmVyIGluIFRleGFzIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IeWRyYXVsaWNfaGVhZCkuIE1lYXN1cmVzIG9mIHByZXNzdXJlIGNhbiBiZSB1c2VkIHRvIGluZmVyIHRoZSBmbG93IG9mIHVuZGVyZ3JvdW5kIHdhdGVyLCBzaW5jZSB3YXRlciBmbG93cyBmcm9tIGhpZ2ggdG8gbG93IHByZXNzdXJlIGFyZWFzLg0KDQpUaGVzZSBkYXRhIHdlcmUgY29sbGVjdGVkIHRvIGV2YWx1YXRlIHBvdGVudGlhbCBmbG93IG9mIGNvbnRhbWluYXRpb24gcmVsYXRlZCB0byBhIGhpZ2ggbGV2ZWwgdG94aWMgd2FzdGUgcmVwb3NpdG9yeSBpbiBUZXhhcy4gVGhlIERlYWYgU21pdGggY291bnR5IHNpdGUgaW4gVGV4YXMgd2FzIG9uZSBvZiB0aHJlZSBwb3RlbnRpYWwgc2l0ZXMgcHJvcG9zZWQgZm9yIHRoaXMgcmVwb3NpdG9yeS4gQmVuZWF0aCB0aGUgc2l0ZSBpcyBhIGRlZXAgYnJpbmUgYXF1aWZlciBrbm93biBhcyB0aGUgV29sZmNhbXAgYXF1aWZlciB0aGF0IG1heSBzZXJ2ZSBhcyBhIGNvbmR1aXQgb2YgY29udGFtaW5hdGlvbiBsZWFraW5nIGZyb20gdGhlIHJlcG9zaXRvcnkuDQoNClRoZSBkYXRhIHNldCBjb25zaXN0cyBvZiA4NSBnZW9yZWZlcmVuY2VkIG1lYXN1cmVtZW50cyBvZiBwaWV6b21ldHJpYyBoZWFkLiBQb3NzaWJsZSBhcHBsaWNhdGlvbnMgb2YgaW50ZXJwb2xhdGlvbiBhcmUgdG8gZGV0ZXJtaW5lIHNpdGVzIGF0IHJpc2sgYW5kIHRvIHF1YW50aWZ5IHVuY2VydGFpbnR5IG9mIHRoZSBpbnRlcnBvbGF0ZWQgc3VyZmFjZSwgdG8gZXZhbHVhdGUgdGhlIGJlc3QgbG9jYXRpb25zIGZvciBtb25pdG9yaW5nIHN0YXRpb25zLg0KDQpgYGB7cn0NCmFxdWlmZXIkSUQgPC0gZmFjdG9yKGMoMTpucm93KGFxdWlmZXIpKSkNCmBgYA0KDQojIyBBY3Rpdml0eQ0KMS4gTWFwIHRoZSBXb2xmY2FtcCBBcXVpZmVyIGRhdGEuDQpgYGB7cn0NCnBsb3Rfd29sZnBhY2sgPC0gZ2dwbG90KGRhdGEgPSBhcXVpZmVyLCBhZXMgKHggPSBYLCB5ID0gWSwgY29sb3IgPSBIKSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC41KSArIA0KICBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJPclJkIiwgdHJhbnMgPSAicmV2ZXJzZSIpICsNCiAgY29vcmRfZXF1YWwoKQ0KcGxvdF93b2xmcGFjaw0KYGBgDQpgYGB7cn0NCnBsb3RfbHkoZGF0YSA9IGFxdWlmZXIsIHggPSB+WCwgeSA9IH5ZLCB6ID0gfkgsDQogICAgICAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gfkgsIGNvbG9yc2NhbGUgPSBjKCJPcmFuZ2UiLCAiUmVkIiksIA0KICAgICAgICAgICAgICAgICAgICAgICBzaG93c2NhbGUgPSBUUlVFKSkgJT4lIA0KICBhZGRfbWFya2VycygpDQpgYGANCg0KMi4gQ3JlYXRlIGEgc3VyZmFjZSB1c2luZyBWb3Jvbm9pIHBvbHlnb25zLg0KDQpgYGB7cn0NCg0KYGBgDQoNCg0KMy4gQ3JlYXRlIGEgc3VyZmFjZSB1c2luZyBJRFcuIFdoYXQgaXMgdGhlIGVmZmVjdCBvZiBjaGFuZ2luZyB0aGUgcG93ZXIgb2YgdGhlIGludmVyc2UgZGlzdGFuY2UgZnVuY3Rpb24/DQoNCmBgYHtyfQ0KVyA8LSBvd2luKHhyYW5nZSA9IGMoMCwgMjAwKSwgeXJhbmdlID0gYygwLCAyMDApKQ0KYXF1aWZlci5wcHAgPC0gYXMucHBwKFggPSBhcXVpZmVyLCBXID0gVykNCg0Kel9wLmlkdzEwIDwtIGlkdyhhcXVpZmVyLnBwcCwgcG93ZXIgPSAxMCkNCnpfcC5pZHcyIDwtIGlkdyhhcXVpZmVyLnBwcCwgcG93ZXIgPSAyKQ0Kel9wLmlkdzUgPC0gaWR3KGFxdWlmZXIucHBwLCBwb3dlciA9IDUpDQoNCnBsb3Qoel9wLmlkdzEwKQ0KcGxvdCh6X3AuaWR3NSkNCnBsb3Qoel9wLmlkdzIpDQpgYGANCg0KNC4gQ3JlYXRlIGEgc3VyZmFjZSB1c2luZyBrLXBvaW50IG1lYW5zLiBXaGF0IGlzIHRoZSBlZmZlY3Qgb2YgY2hhbmdpbmcgdGhlIG51bWJlciBvZiBwb2ludHMgdXNlZCBpbiB0aGlzIGFsZ29yaXRobT8NCg0KYGBge3J9DQp0YXJnZXRfeHkgPSBleHBhbmQuZ3JpZCh4ID0gc2VxKDAuNSwgMTAwLCAyLjIpLCB5ID0gc2VxKDAuNSwgMTAwLCAyLjIpKQ0Kc291cmNlX3h5ID0gY2JpbmQoeCA9IGFxdWlmZXIkWCwgeSA9IGFxdWlmZXIkWSkNCg0Ka3BvaW50LjEwIDwtIGtwb2ludG1lYW4oc291cmNlX3h5ID0gc291cmNlX3h5LCB6ID0gYXF1aWZlciRILCB0YXJnZXRfeHkgPSB0YXJnZXRfeHksIGsgPTEwKQ0Ka3BvaW50LjEgPC0ga3BvaW50bWVhbihzb3VyY2VfeHkgPSBzb3VyY2VfeHksIHogPSBhcXVpZmVyJEgsIHRhcmdldF94eSA9IHRhcmdldF94eSwgayA9MSkNCmtwb2ludC41IDwtIGtwb2ludG1lYW4oc291cmNlX3h5ID0gc291cmNlX3h5LCB6ID0gYXF1aWZlciRILCB0YXJnZXRfeHkgPSB0YXJnZXRfeHksIGsgPTUpDQoNCmdncGxvdChkYXRhID0ga3BvaW50LjEwLCBhZXMoeCA9IHgsIHkgPSB5LCBmaWxsID0geikpICsNCiAgZ2VvbV90aWxlKCkgKw0KICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIk9yUmQiLCB0cmFucyA9ICJyZXZlcnNlIikgKw0KICBjb29yZF9lcXVhbCgpDQoNCmdncGxvdChkYXRhID0ga3BvaW50LjUsIGFlcyh4ID0geCwgeSA9IHksIGZpbGwgPSB6KSkgKw0KICBnZW9tX3RpbGUoKSArDQogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiT3JSZCIsIHRyYW5zID0gInJldmVyc2UiKSArDQogIGNvb3JkX2VxdWFsKCkNCg0KZ2dwbG90KGRhdGEgPSBrcG9pbnQuMSwgYWVzKHggPSB4LCB5ID0geSwgZmlsbCA9IHopKSArDQogIGdlb21fdGlsZSgpICsNCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJPclJkIiwgdHJhbnMgPSAicmV2ZXJzZSIpICsNCiAgY29vcmRfZXF1YWwoKQ0KDQpgYGANCg0KNS4gRGlzY3VzcyB0aGUgbGltaXRhdGlvbnMgb2YgdGhlc2UgYXBwcm9hY2hlcy4gSG93IGNhbiB5b3UgY2FsY3VsYXRlIHRoZSB1bmNlcnRhaW50eSBpbiB0aGUgcHJlZGljdGlvbnM/